
    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>6-MySQL事务 - 学习卡片</title>
      <style>
        body { font-family: sans-serif; background-color: #f0f8ff; color: #333; display: flex; flex-direction: column; align-items: center; padding: 50px 20px; }
        .header h1 { font-size: 32px; }
        .grid-container { display: grid; grid-template-columns: repeat(3, 1fr); gap: 28px; width: 100%; max-width: 1200px; }
        .card-container { perspective: 1200px; cursor: pointer; height: 250px; }
        .card { width: 100%; height: 100%; position: relative; transform-style: preserve-3d; transition: transform 0.7s; border-radius: 16px; box-shadow: 0 4px 16px rgba(0,0,0,0.08); }
        .card-container.flipped .card { transform: rotateY(180deg); }
        .card-face { position: absolute; width: 100%; height: 100%; backface-visibility: hidden; display: flex; flex-direction: column; box-sizing: border-box; border-radius: 16px; background-color: #fff; padding: 24px; }
        .card-back { background-color: #f0fff4; transform: rotateY(180deg); justify-content: space-between; }
        .card-category { font-size: 14px; color: #0052d9; margin-bottom: 8px; font-weight: 500; }
        .card-question { font-size: 20px; font-weight: 500; flex-grow: 1; display: flex; align-items: center; justify-content: center; text-align: center; }
        .card-answer-wrapper { flex-grow: 1; overflow-y: auto; }
        .card-answer { font-size: 15px; line-height: 1.7; }
        .card-footer { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 16px; margin-top: 16px; }
        .card-source { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 12px; margin-top: 12px; }
      </style>
    </head>
    <body>
      <div class="header">
        <h1>6-MySQL事务 - 学习卡片</h1>
      </div>
      <div class="grid-container">
        
    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">理论</div>
          <div class="card-question">Amazon SageMaker Feature Store 主要解决了机器学习开发中的哪些核心问题？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">理论</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">它主要解决了三大核心问题：1. 通过集中存储和共享特征来加速机器学习开发，避免重复工作；2. 通过为训练和推理提供单一的特征事实来源，减少训练与服务之间的偏差（skew）；3. 通过低延迟的在线存储，大规模、安全地管理和提供特征。</div>
          </div>
          <div class="card-source">来源: 什么是 Amazon SageMaker Feature Store？, 主要优势</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">核心概念</div>
          <div class="card-question">在 SageMaker Feature Store 中，Online Store 和 Offline Store 的区别和主要用途是什么？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">核心概念</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">Online Store 是一个低延迟、高吞吐的键值存储，主要用于实时推理场景，它存储每个记录标识符的最新特征值。Offline Store 则将历史特征数据存储在 Amazon S3 存储桶中，主要用于模型训练、特征探索和批量推理。</div>
          </div>
          <div class="card-source">来源: 核心概念</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">技术</div>
          <div class="card-question">什么是特征组（Feature Group）？它包含哪两种主要类型？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">技术</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">特征组是 Feature Store 中的主要资源，是特征和元数据的逻辑容器，类似于数据库中的表。它包含两种类型：1. Online Store Only Feature Group，仅将数据存储在在线存储中；2. Online and Offline Feature Group，将数据同时存储在在线和离线存储中，以支持训练和实时推理两种场景。</div>
          </div>
          <div class="card-source">来源: 核心概念, 特征组类型</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">机制</div>
          <div class="card-question">SageMaker Feature Store 是如何帮助减少“训练-服务偏差 (training-serving skew)”的？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">机制</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">它通过为特征提供一个统一的真实来源（single source of truth）来减少偏差。用于模型训练（从 Offline Store 获取）和实时推理（从 Online Store 获取）的特征都源自同一个特征组和相同的处理逻辑，从而确保了两者之间的一致性。</div>
          </div>
          <div class="card-source">来源: 主要优势</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">核心概念</div>
          <div class="card-question">在 Feature Group 的定义中，“Record Identifier Name”和“Event Time”这两个关键字段分别扮演什么角色？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">核心概念</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">“Record Identifier Name”是唯一标识一个记录（行）的特征名称，相当于表的主键。“Event Time”是特征值生成时的时间戳，它是实现时间旅行查询（Time-Travel Queries）以获取特定时间点特征数据的关键。</div>
          </div>
          <div class="card-source">来源: 核心概念</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">特性</div>
          <div class="card-question">什么是“时间旅行查询 (Time-Travel Queries)”？它在机器学习中解决了什么重要问题？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">特性</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">时间旅行查询是 Offline Store 的一项功能，允许用户查询并创建在过去某个特定时间点存在的特征数据集。它解决了“数据泄露”或“特征泄露”的问题，确保模型训练时只使用预测事件发生前可用的数据，从而防止模型“作弊”。</div>
          </div>
          <div class="card-source">来源: 时间旅行查询</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">机制</div>
          <div class="card-question">向 SageMaker Feature Store 中注入数据的核心 API 是什么？对于一个“Online and Offline”类型的特征组，该 API 如何处理数据流？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">机制</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">核心的注入 API 是 `PutRecord`。当为“Online and Offline”类型的特征组调用此 API 时，Feature Store 会自动将数据记录写入到两个地方：一份写入低延迟的 Online Store 以供实时查询，另一份写入到作为历史档案的 S3 Offline Store 中。</div>
          </div>
          <div class="card-source">来源: 工作机制</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">理论</div>
          <div class="card-question">为什么说使用 Feature Store 能够“加速机器学习开发”？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">理论</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">因为它提供了一个集中的特征存储库，使得数据科学家和工程师可以轻松地发现、共享和重用已经创建好的特征。这避免了不同团队或项目重复进行相同的特征工程工作，提高了协作效率和开发速度。</div>
          </div>
          <div class="card-source">来源: 主要优势</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">技术</div>
          <div class="card-question">在什么场景下，开发者会选择使用“Online Store Only”类型的特征组？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">技术</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">当应用场景只需要以低延迟访问最新的特征值，而不需要存储历史数据来进行模型训练时，会选择使用“Online Store Only”类型。例如，一个只需要最新用户画像进行实时推荐但其模型训练依赖于其他数据源的系统。</div>
          </div>
          <div class="card-source">来源: 特征组类型</div>
        </div>
      </div>
    </div>

      </div>
    </body>
    </html>
